home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / DELPHI / D_RAS.ZIP / TESTFORM.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1996-09-27  |  10.1 KB  |  361 lines

  1. unit TestForm;
  2.  
  3. // Remote Access API test program
  4. // by Davide Moretti <dmoretti@iper.net>
  5. //
  6. // Play with it! :-)
  7.  
  8. interface
  9.  
  10. uses
  11.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Ras,
  12.   StdCtrls, ExtCtrls, ComCtrls;
  13.  
  14. type
  15.   TfrmTest = class(TForm)
  16.     lstEntries: TListBox;
  17.     btnGetEntries: TButton;
  18.     btnCreateEntry: TButton;
  19.     btnEditEntry: TButton;
  20.     grpSelectedEntry: TGroupBox;
  21.     btnGetParams: TButton;
  22.     btnDialEntry: TButton;
  23.     lblUserName: TLabel;
  24.     lblPassword: TLabel;
  25.     txtUserName: TEdit;
  26.     txtPassword: TEdit;
  27.     btnHangup: TButton;
  28.     optDialMode: TRadioGroup;
  29.     lblAsync: TLabel;
  30.     lblStatus: TLabel;
  31.     btnActiveConn: TButton;
  32.     lvConnections: TListView;
  33.     btnSetParams: TButton;
  34.     txtCopyright: TMemo;
  35.     procedure btnGetEntriesClick(Sender: TObject);
  36.     procedure btnCreateEntryClick(Sender: TObject);
  37.     procedure btnEditEntryClick(Sender: TObject);
  38.     procedure btnDialEntryClick(Sender: TObject);
  39.     procedure btnHangupClick(Sender: TObject);
  40.     procedure btnGetParamsClick(Sender: TObject);
  41.     procedure lstEntriesClick(Sender: TObject);
  42.     procedure txtUserNameChange(Sender: TObject);
  43.     procedure btnActiveConnClick(Sender: TObject);
  44.     procedure btnSetParamsClick(Sender: TObject);
  45.   private
  46.     { Private declarations }
  47.     dialparams: TRasDialParams;
  48.   public
  49.     { Public declarations }
  50.   end;
  51.  
  52. var
  53.   frmTest: TfrmTest;
  54.  
  55. implementation
  56.  
  57. {$R *.DFM}
  58.  
  59. function StatusString(state: TRasConnState; error: Longint): String;
  60.   var
  61.     c: Array[0..100] of Char;
  62.     s: String;
  63.   begin
  64.   if error <> 0 then
  65.     begin
  66.     RasGetErrorString(error, c, 100);
  67.     Result := c;
  68.     end
  69.   else
  70.     begin
  71.     s := '';
  72.     case State of
  73.       RASCS_OpenPort:
  74.         s := 'Opening port';
  75.       RASCS_PortOpened:
  76.         s := 'Port opened';
  77.       RASCS_ConnectDevice:
  78.         s := 'Connecting device';
  79.       RASCS_DeviceConnected:
  80.         s := 'Device connected';
  81.       RASCS_AllDevicesConnected:
  82.         s := 'All devices connected';
  83.       RASCS_Authenticate:
  84.         s := 'Start authenticating';
  85.       RASCS_AuthNotify:
  86.         s := 'Authentication: notify';
  87.       RASCS_AuthRetry:
  88.         s := 'Authentication: retry';
  89.       RASCS_AuthCallback:
  90.         s := 'Authentication: callback';
  91.       RASCS_AuthChangePassword:
  92.         s := 'Authentication: change password';
  93.       RASCS_AuthProject:
  94.         s := 'Authentication: projecting';
  95.       RASCS_AuthLinkSpeed:
  96.         s := 'Authentication: link speed';
  97.       RASCS_AuthAck:
  98.         s := 'Authentication: acknowledge';
  99.       RASCS_ReAuthenticate:
  100.         s := 'Authentication: reauthenticate';
  101.       RASCS_Authenticated:
  102.         s := 'Authenticated';
  103.       RASCS_PrepareForCallback:
  104.         s := 'Preparing for callback';
  105.       RASCS_WaitForModemReset:
  106.         s := 'Waiting for modem reset';
  107.       RASCS_WaitForCallback:
  108.         s := 'Waiting for callback';
  109.       RASCS_Projected:
  110.         s := 'Projected';
  111.       RASCS_StartAuthentication:
  112.         s := 'Start authentication';
  113.       RASCS_CallbackComplete:
  114.         s := 'Callback complete';
  115.       RASCS_LogonNetwork:
  116.         s := 'Logging on network';
  117.  
  118.       RASCS_Interactive:
  119.         s := 'Interactive';
  120.       RASCS_RetryAuthentication:
  121.         s := 'Retry Authentication';
  122.       RASCS_CallbackSetByCaller:
  123.         s := 'Callback set by caller';
  124.       RASCS_PasswordExpired:
  125.         s := 'Password expired';
  126.  
  127.       RASCS_Connected:
  128.         s := 'Connected';
  129.       RASCS_Disconnected:
  130.         s := 'Disconnected';
  131.       end;
  132.     Result := s;
  133.     end;
  134.   end;
  135.  
  136. // Callback RAS function
  137. procedure RasCallback(msg: Integer; state: TRasConnState;
  138.     error: Longint); stdcall
  139.   begin
  140.   if error = 0 then
  141.     frmTest.lblStatus.Font.Color := clBlue
  142.   else
  143.     frmTest.lblStatus.Font.Color := clRed;
  144.   frmTest.lblStatus.Caption := StatusString(state, error);
  145.   frmTest.btnActiveConn.Click;
  146.   end;
  147.  
  148. procedure TfrmTest.btnGetEntriesClick(Sender: TObject);
  149.   var
  150.     bufsize: Longint;
  151.     numEntries: Longint;
  152.     entries: Array[1..100] of TRasEntryName;
  153.     x: Integer;
  154.   begin
  155.   btnEditEntry.Enabled := False;
  156.   btnGetParams.Enabled := False;
  157.   txtUserName.Text := '';
  158.   txtPassword.Text := '';
  159.   lstEntries.Items.Clear;
  160.   entries[1].dwSize := SizeOf(TRasEntryName);
  161.   bufsize := SizeOf(TRasEntryName) * 100;
  162.   if RasEnumEntries(nil, nil, @entries[1], bufsize, numEntries) = 0 then
  163.     begin
  164.     if numEntries > 0 then
  165.       begin
  166.       for x := 1 to numEntries do
  167.         lstEntries.Items.Add(entries[x].szEntryName);
  168.       lstEntries.ItemIndex := 0;
  169.       lstEntriesClick(lstEntries);
  170.       btnEditEntry.Enabled := True;
  171.       btnGetParams.Enabled := True;
  172.       end;
  173.     end
  174.   else
  175.     ShowMessage('RasEnumEntries failed.');
  176.   end;
  177.  
  178. procedure TfrmTest.btnCreateEntryClick(Sender: TObject);
  179.   begin
  180.   if RasCreatePhonebookEntry(Handle, nil) = 0 then
  181.     btnGetEntries.Click
  182.   else
  183.     ShowMessage('RasCreatePhonebookEntry failed.');
  184.   end;
  185.  
  186. procedure TfrmTest.btnEditEntryClick(Sender: TObject);
  187.   begin
  188.   if RasEditPhonebookEntry(Handle, nil,
  189.       PChar(lstEntries.Items[lstEntries.ItemIndex])) <> 0 then
  190.     ShowMessage('RasEditPhonebookEntry failed.');
  191.   end;
  192.  
  193. procedure TfrmTest.btnDialEntryClick(Sender: TObject);
  194.   var
  195.     r: integer;
  196.     c: Array[0..100] of Char;
  197.     hRas: THRasConn;
  198.   begin
  199.   Screen.Cursor := crHourglass;
  200.   FillChar(dialparams, SizeOf(TRasDialParams), 0);
  201.   with dialparams do
  202.     begin
  203.     dwSize := Sizeof(TRasDialParams);
  204.     StrPCopy(szEntryName, lstEntries.Items[lstEntries.ItemIndex]);
  205.     StrPCopy(szUserName, txtUserName.Text);
  206.     StrPCopy(szPassword, txtPassword.Text);
  207.     // You can override phone number here...
  208.     // StrPCopy(szPhoneNumber, 'xxxxxx');
  209.     end;
  210.   hRas := 0;
  211.   if optDialMode.ItemIndex = 0 then
  212.     // Sync dial
  213.     begin
  214.     lblStatus.ParentFont := True;
  215.     lblStatus.Caption := 'Dialing...';
  216.     lblStatus.Refresh;
  217.     r := RasDial(nil, nil, dialparams, 0, nil, hRas);
  218.     if r = 0 then
  219.       begin
  220.       lblStatus.Caption := 'Connected';
  221.       btnActiveConn.Click;
  222.       end
  223.     else
  224.       begin
  225.       lblStatus.Caption := 'Error';
  226.       if hRas <> 0 then
  227.         RasHangUp(hRas);
  228.       end;
  229.     end
  230.    else
  231.     // Async dial
  232.     r := RasDial(nil,   // This field is ignored in Windows95
  233.         nil,  // Phonebook: use default (not used on Win95)
  234.         dialparams,
  235.         0, // use callback function of type RASDIALFUNC
  236.         @RasCallback,   // callback function
  237.         hRas);
  238.   if r <> 0 then
  239.     begin
  240.     RasGetErrorString(r, c, 100);
  241.     ShowMessage('RasDial failed: ' + c);
  242.     end;
  243.   Screen.Cursor := crDefault;
  244.   end;
  245.  
  246. procedure TfrmTest.btnHangupClick(Sender: TObject);
  247.   var
  248.     hRas: THRasConn;
  249.   begin
  250.   hRas := Longint(lvConnections.ItemFocused.Data);
  251.   if RasHangUp(hRas) = 0 then
  252.     begin
  253.     Sleep(1000);  // wait 1 second
  254.     btnActiveConn.Click;
  255.     end
  256.   else
  257.     ShowMessage('RasHangUp failed.');
  258.   end;
  259.  
  260. procedure TfrmTest.btnGetParamsClick(Sender: TObject);
  261.   var
  262.     fp: LongBool;
  263.     r: Longint;
  264.     c: Array[0..100] of Char;
  265.   begin
  266.   FillChar(dialparams, SizeOf(TRasDialParams), 0);
  267.   with dialparams do
  268.     begin
  269.     dwSize := Sizeof(TRasDialParams);
  270.     StrPCopy(szEntryName, lstEntries.Items[lstEntries.ItemIndex]);
  271.     end;
  272.   r := RasGetEntryDialParams(nil, dialparams, fp);
  273.   if r = 0 then
  274.     with dialparams do
  275.       begin
  276.       txtUserName.Text := szUserName;
  277.       if fp then
  278.         txtPassword.Text := szPassword;
  279.       end
  280.   else
  281.     begin
  282.     RasGetErrorString(r, c, 100);
  283.     ShowMessage('RasGetEntryDialParams failed: ' + c);
  284.     end;
  285.   end;
  286.  
  287. procedure TfrmTest.lstEntriesClick(Sender: TObject);
  288.   begin
  289.   grpSelectedEntry.Caption := 'Selected entry: ' +
  290.       lstEntries.Items[lstEntries.ItemIndex];
  291.   end;
  292.  
  293. procedure TfrmTest.txtUserNameChange(Sender: TObject);
  294.   begin
  295.   if lstEntries.ItemIndex = -1 then
  296.     Exit;
  297.   btnDialEntry.Enabled := (txtUserName.Text <> '');
  298.   btnSetParams.Enabled := btnDialEntry.Enabled;
  299.   end;
  300.  
  301. procedure TfrmTest.btnActiveConnClick(Sender: TObject);
  302.   var
  303.     bufsize: Longint;
  304.     numEntries: Longint;
  305.     x: Integer;
  306.     entries: Array[1..100] of TRasConn;
  307.     stat: TRasConnStatus;
  308.   begin
  309.   entries[1].dwSize := SizeOf(TRasConn);
  310.   bufsize := SizeOf(TRasConn) * 100;
  311.   btnHangup.Enabled := False;
  312.   lvConnections.Items.Clear;
  313.   FillChar(stat, Sizeof(TRasConnStatus), 0);
  314.   stat.dwSize := Sizeof(TRasConnStatus);
  315.   if RasEnumConnections(@entries[1], bufsize, numEntries) = 0 then
  316.     begin
  317.     if numEntries > 0 then
  318.       begin
  319.       for x := 1 to numEntries do
  320.         with lvConnections.Items.Add, entries[x] do
  321.           begin
  322.           Data := Pointer(hrasconn);
  323.           Caption := szEntryName;
  324.           SubItems.Add(szDeviceType);
  325.           SubItems.Add(szDeviceName);
  326.           RasGetConnectStatus(hrasconn, stat);
  327.           SubItems.Add(StatusString(stat.rasconnstate, stat.dwError));
  328.           end;
  329.       lvConnections.ItemFocused := lvConnections.Items[0];
  330.       btnHangup.Enabled := True;
  331.       end;
  332.     end
  333.   else
  334.     ShowMessage('RasEnumConnections failed.');
  335.   end;
  336.  
  337. procedure TfrmTest.btnSetParamsClick(Sender: TObject);
  338.   begin
  339.   if Application.MessageBox(PChar('Save parameters for entry ' +
  340.       lstEntries.Items[lstEntries.ItemIndex] + '?'), PChar(Caption),
  341.       MB_ICONWARNING or MB_YESNO) = IDYES then
  342.     begin
  343.     with dialparams do
  344.       begin
  345.       // Note: as stated in WIN32.HLP, the szPhoneNumber cannot be changed by
  346.       // this function. The only way to change it (as far as I know) is to use
  347.       // RasEditPhoneBookEntry and change it manually. Or it's possible to
  348.       // specify szPhoneNumber for the RasDial function.
  349.       dwSize := Sizeof(TRasDialParams);
  350.       StrPCopy(szEntryName, lstEntries.Items[lstEntries.ItemIndex]);
  351.       StrPCopy(szUserName, txtUserName.Text);
  352.       StrPCopy(szPassword, txtPassword.Text);
  353.       StrPCopy(szPhoneNumber, '111');
  354.       end;
  355.     if RasSetEntryDialParams(nil, dialparams, False) <> 0 then
  356.       ShowMessage ('RasSetEntryDialParams failed.');
  357.     end;
  358.   end;
  359.  
  360. end.
  361.